home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / windows / win31 / macsyma.arj / MACSDEMO.EXE / FACEXP.OUT < prev    next >
Text File  |  1993-09-15  |  23KB  |  254 lines

  1.  
  2. (c1) /*  DEMONSTRATION OF SPECIAL FACTORING-EXPANSION PACKAGE `FACEXP'
  3. */
  4. if get('facexp,'version)=false then load('facexp);
  5. C:\MACSD2B\share\FACEXP.fas being loaded.
  6. |$label(0,15,Times New Roman,$(d1$))C:\MACSD2B\share\FACEXP.fas
  7.  
  8. (c2) /* Here is an expression to work with. */
  9. exp1: d*e*f^2 + c*e*f^2 - d*e + c*e + b*c*d + a*c*d;
  10. |$label(0,15,Times New Roman,$(d2$))d$in( )e$in( )$sup(f,2)$hinge()$in( + )c$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e$hinge()$in( + )c$in( )e$hinge()$in( + )b$in( )c$in( )d$hinge()$in( + )a$in( )c$in( )d
  11.  
  12. (c3) /* The function FACSUM can be used to cast an expression into a form
  13.     in which it is fully expanded with respect to a specified set of
  14.     variables, but factored with respect to all other variables.
  15. */
  16. facsum(exp1,e,f);
  17. C:\MACSD2B\share\genut.fas being loaded.
  18. C:\MACSD2B\share\index.fas being loaded.
  19. |$label(0,15,Times New Roman,$(d3$))$paren(d$in( + )c,$(,$))$in( )e$in( )$sup(f,2)$hinge()$in( - )$paren(d$in( - )c,$(,$))$in( )e$hinge()$in( + )$paren(b$in( + )a,$(,$))$in( )c$in( )d
  20.  
  21. (c4) /*  Another example: */
  22. exp2: c*d*(x*y*z+w*y*z+u*v^2*z-u*z+u*v^2*y+u*y)
  23.     + d*e*f^2 + c*e*f^2 - d*e + c*e + b*c*d;
  24. |$label(0,15,Times New Roman,$(d4$))c$in( )d$in( )$paren(x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )u$in( )$sup(v,2)$in( )z$in( - )u$in( )z$in( + )u$in( )$sup(v,2)$in( )y$in( + )u$in( )y,$(,$))$hinge()$in( + )d$in( )e$in( )$sup(f,2)$hinge()$in( + )c$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e$hinge()$in( + )c$in( )e$hinge()$in( + )b$in( )c$in( )d
  25.  
  26. (c5) /* Another mode in which FACSUM is useful results in a form in which
  27.     a second set of variables plays the same role as above, but one level
  28.     deeper in the expression.  These variables are given to FACSUM in a
  29.     list. */
  30. answer: facsum(exp2,c,d,[u,v]);
  31. |$label(0,15,Times New Roman,$(d5$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( - )u$in( )$paren(z$in( - )y,$(,$))$in( + )x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren(f$in( - )1,$(,$))$in( )$paren(f$in( + )1,$(,$))
  32.  
  33. (c6) /*  The list can occur in any position in the argument list. */
  34. facsum(exp2,[u,v],c,d);
  35. |$label(0,15,Times New Roman,$(d6$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( - )u$in( )$paren(z$in( - )y,$(,$))$in( + )x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren(f$in( - )1,$(,$))$in( )$paren(f$in( + )1,$(,$))
  36.  
  37. (c7) /*  Or it can be split up. */
  38. facsum(exp2,c,[u],d,[v]);
  39. |$label(0,15,Times New Roman,$(d7$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( - )u$in( )$paren(z$in( - )y,$(,$))$in( + )x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren(f$in( - )1,$(,$))$in( )$paren(f$in( + )1,$(,$))
  40.  
  41. (c8) /*  List arguments can be nested arbitrarily deeply,
  42.      depending upon the requirements of the situation. */
  43. exp3: c*d*q*x*y*z+2*c*d*m*p*x*y*z+c*d*m*n*x*y*z + c*d*q*w*y*z
  44.     + 2*c*d*m*p*w*y*z + c*d*m*n*w*y*z + c*d*q*u*v^2*z + 2*c*d*m*p*u*v^2*z
  45.     + c*d*m*n*u*v^2*z - c*d*q*u*z-2*c*d*m*p*u*z    - c*d*m*n*u*z+c*d*u*v^2*y
  46.     + c*d*u*y + d*e*f^2 + c*e*f^2 - d*e + c*e + b*c*d;
  47. |$label(0,15,Times New Roman,$(d8$))c$in( )d$in( )q$in( )x$in( )y$in( )z$hinge()$in( + )2$in( )c$in( )d$in( )m$in( )p$in( )x$in( )y$in( )z$hinge()$in( + )c$in( )d$in( )m$in( )n$in( )x$in( )y$in( )z$hinge()$in( + )c$in( )d$in( )q$in( )w$in( )y$in( )z$hinge()$in( + )2$in( )c$in( )d$in( )m$in( )p$in( )w$in( )y$in( )z$hinge()$in( + )c$in( )d$in( )m$in( )n$in( )w$in( )y$in( )z$hinge()$in( + )c$in( )d$in( )q$in( )u$in( )$sup(v,2)$in( )z$hinge()$in( + )2$in( )c$in( )d$in( )m$in( )p$in( )u$in( )$sup(v,2)$in( )z$hinge()$in( + )c$in( )d$in( )m$in( )n$in( )u$in( )$sup(v,2)$in( )z$hinge()$in( - )c$in( )d$in( )q$in( )u$in( )z$hinge()$in( - )2$in( )c$in( )d$in( )m$in( )p$in( )u$in( )z$hinge()$in( - )c$in( )d$in( )m$in( )n$in( )u$in( )z$hinge()$in( + )c$in( )d$in( )u$in( )$sup(v,2)$in( )y$hinge()$in( + )c$in( )d$in( )u$in( )y$hinge()$in( + )d$in( )e$in( )$sup(f,2)$hinge()$in( + )c$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e$hinge()$in( + )c$in( )e$hinge()$in( + )b$in( )c$in( )d
  48.  
  49. (c9) facsum(exp3,c,d,[u,v,[z,[m]]]);
  50. |$label(0,15,Times New Roman,$(d9$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren($paren(q$in( + )m$in( )$paren(2$in( )p$in( + )n,$(,$)),$(,$))$in( )z$in( + )y,$(,$))$in( + )u$in( )$paren($paren($in( - )q$in( - )m$in( )$paren(2$in( )p$in( + )n,$(,$)),$(,$))$in( )z$in( + )y,$(,$))$in( + )$paren(q$in( )$paren(x$in( + )w,$(,$))$in( + )m$in( )$paren(2$in( )p$in( + )n,$(,$))$in( )$paren(x$in( + )w,$(,$)),$(,$))$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren(f$in( - )1,$(,$))$in( )$paren(f$in( + )1,$(,$))
  51.  
  52. (c10) /*  The arguments of FACSUM need not be atomic. */
  53. exp4: subst(log(m+n),c,exp2);
  54. |$label(0,15,Times New Roman,$(d10$))d$in( )log$paren(n$in( + )m)$in( )$paren(x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )u$in( )$sup(v,2)$in( )z$in( - )u$in( )z$in( + )u$in( )$sup(v,2)$in( )y$in( + )u$in( )y,$(,$))$hinge()$in( + )e$in( )$sup(f,2)$in( )log$paren(n$in( + )m)$hinge()$in( + )e$in( )log$paren(n$in( + )m)$hinge()$in( + )b$in( )d$in( )log$paren(n$in( + )m)$hinge()$in( + )d$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e
  55.  
  56. (c11) facsum(exp4,log(m+n),[e,f]);
  57. |$label(0,15,Times New Roman,$(d11$))log$paren(n$in( + )m)$in( )$paren(d$in( )$paren(x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )u$in( )$sup(v,2)$in( )z$in( - )u$in( )z$in( + )u$in( )$sup(v,2)$in( )y$in( + )u$in( )y$in( + )b,$(,$))$in( + )e$in( )$sup(f,2)$in( + )e,$(,$))$hinge()$in( + )d$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e
  58.  
  59. (c12) /*  FACSUM also recognizes in its argument the special form OPERATOR.
  60.     This form can be used to indicate to FACSUM that all structures within its
  61.     argument that  have certain indicated leading operators are to be
  62.     specially treated. For example, consider the expression EXP5:
  63. */
  64. exp5: x + (a.b)*(c+d) + (b.a)*(d+c) + log(a*b)*2*(c+d) + log(a/b)*2*(d+c);
  65. |$label(0,15,Times New Roman,$(d12$))x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))
  66.  
  67. (c13) /* First FACTOR EXP5, to obtain an expression to work on. */
  68. exp5_factored:factor(exp5);
  69. |$label(0,15,Times New Roman,$(d13$))x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )d$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )d$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )d$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )d$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )c$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )c$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )c$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )c
  70.  
  71. (c14) /* To demonstrate the use of OPERATOR, we recover the original
  72.     form of EXP5. */
  73. facsum(exp5_factored,operator(log,"."));
  74. C:\MACSD2B\share\listop.fas being loaded.
  75. |$label(0,15,Times New Roman,$(d14$))x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))
  76.  
  77. (c15) is(%=exp5);
  78. |$label(0,15,Times New Roman,$(d15$))true
  79.  
  80. (c16) /* This form also works: */
  81. facsum(exp5_factored,operator(log),operator("."));
  82. |$label(0,15,Times New Roman,$(d16$))x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))
  83.  
  84. (c17) /* Another function that is related to FACSUM is FACTORFACSUM.
  85.     FACTORFACSUM is similar to FACSUM, except that it first factors the
  86.     expression, then calls FACSUM on each of the factors. It can take all
  87.     the arguments that FACSUM can, including the nested lists and the form
  88.     OPERATOR.
  89. */
  90. exp6: exp5*2*(e+(h+f)*(e.f));
  91. |$label(0,15,Times New Roman,$(d17$))2$hinge()$in( )$open($()$paren(e$in( . )f,$(,$))$in( )$paren(h$in( + )f,$(,$))$hinge()$in( + )e$close($))$hinge()$in( )$open($()x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))$close($))
  92.  
  93. (c18) /* EXPAND it. */
  94. exp6_expanded:expand(exp6);
  95. |$label(0,15,Times New Roman,$(d18$))2$in( )$paren(e$in( . )f,$(,$))$in( )h$in( )x$hinge()$in( + )2$in( )$paren(e$in( . )f,$(,$))$in( )f$in( )x$hinge()$in( + )2$in( )e$in( )x$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )h$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )d$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )c$in( )$paren(e$in( . )f,$(,$))$in( )f$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )d$in( )e$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )d$in( )e$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )d$in( )e$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )d$in( )e$hinge()$in( + )4$in( )log$paren(a$in( )b)$in( )c$in( )e$hinge()$in( + )2$in( )$paren(b$in( . )a,$(,$))$in( )c$in( )e$hinge()$in( + )4$in( )log$paren($q(a,b))$in( )c$in( )e$hinge()$in( + )2$in( )$paren(a$in( . )b,$(,$))$in( )c$in( )e
  96.  
  97. (c19) /* To illustrate the use of FACTORFACSUM, we recover the original form
  98.     of EXP6. */
  99. factorfacsum(exp6_expanded,operator(".",log));
  100. |$label(0,15,Times New Roman,$(d19$))2$hinge()$in( )$open($()$paren(e$in( . )f,$(,$))$in( )$paren(h$in( + )f,$(,$))$hinge()$in( + )e$close($))$hinge()$in( )$open($()x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))$close($))
  101.  
  102. (c20) is(%=exp6);
  103. |$label(0,15,Times New Roman,$(d20$))true
  104.  
  105. (c21) /* There is a switch NEXTLAYERFACTOR[FALSE] which can be used in two
  106.     ways to control the behavior of FACSUM.  By setting
  107.     NEXTLAYERFACTOR:TRUE one can force FACSUM to FACTOR the coefficients of
  108.     the variables specified at any level before it calls itself recursively
  109.     on the factors of those coefficients.
  110. */
  111. exp7: f*h + f*g - 2*c*d*f^2 + 2*c*d*e^2;
  112. |$label(0,15,Times New Roman,$(d21$))f$in( )h$hinge()$in( + )f$in( )g$hinge()$in( - )2$in( )c$in( )d$in( )$sup(f,2)$hinge()$in( + )2$in( )c$in( )d$in( )$sup(e,2)
  113.  
  114. (c22) facsum(exp7,c,[e]), nextlayerfactor:true;
  115. |$label(0,15,Times New Roman,$(d22$))f$in( )$paren(h$in( + )g,$(,$))$hinge()$in( - )2$in( )c$in( )d$in( )$paren(f$in( - )e,$(,$))$in( )$paren(f$in( + )e,$(,$))
  116.  
  117. (c23) facsum(exp7,c,[e]);
  118. |$label(0,15,Times New Roman,$(d23$))f$in( )$paren(h$in( + )g,$(,$))$hinge()$in( + )c$in( )$paren(2$in( )d$in( )$sup(e,2)$in( - )2$in( )d$in( )$sup(f,2),$(,$))
  119.  
  120. (c24) /* The second method for controlling the behavior of FACSUM is to include
  121.     the atom NEXTLAYERFACTOR in the in the argument list of FACSUM.
  122. */
  123. facsum(exp7,c,'nextlayerfactor,[e]);
  124. |$label(0,15,Times New Roman,$(d24$))f$in( )$paren(h$in( + )g,$(,$))$hinge()$in( - )2$in( )c$in( )d$in( )$paren(f$in( - )e,$(,$))$in( )$paren(f$in( + )e,$(,$))
  125.  
  126. (c25) /* Notice that this method produced the same result as simply setting
  127.     NEXTLAYERFACTOR:TRUE.  The difference between the two methods is that the
  128.     second method allows one to achieve the effect of NEXTLAYERFACTOR:TRUE
  129.     for only a few specified levels of the expression, instead of for all
  130.     levels.  For example, consider EXP8.
  131. */
  132. exp8: - 2*c*d*f^2*h^2*l^2 + f*h^2*l^2 - 4*c*d*f^2*h^2*k*l + 2*f*h^2*k*l
  133.       - 4*c*d*f^2*g*h*l + 2*f*g*h*l - 2*c*d*f^2*h^2*k^2 + f*h^2*k^2
  134.       - 4*c*d*f^2*g*h*k + 2*f*g*h*k - 2*c*d*f^2*g^2 + f*g^2 + 2*c*d*e^2;
  135. |$label(0,15,Times New Roman,$(d25$))$in( - )2$in( )c$in( )d$in( )$sup(f,2)$in( )$sup(h,2)$in( )$sup(l,2)$hinge()$in( + )f$in( )$sup(h,2)$in( )$sup(l,2)$hinge()$in( - )4$in( )c$in( )d$in( )$sup(f,2)$in( )$sup(h,2)$in( )k$in( )l$hinge()$in( + )2$in( )f$in( )$sup(h,2)$in( )k$in( )l$hinge()$in( - )4$in( )c$in( )d$in( )$sup(f,2)$in( )g$in( )h$in( )l$hinge()$in( + )2$in( )f$in( )g$in( )h$in( )l$hinge()$in( - )2$in( )c$in( )d$in( )$sup(f,2)$in( )$sup(h,2)$in( )$sup(k,2)$hinge()$in( + )f$in( )$sup(h,2)$in( )$sup(k,2)$hinge()$in( - )4$in( )c$in( )d$in( )$sup(f,2)$in( )g$in( )h$in( )k$hinge()$in( + )2$in( )f$in( )g$in( )h$in( )k$hinge()$in( - )2$in( )c$in( )d$in( )$sup(f,2)$in( )$sup(g,2)$hinge()$in( + )f$in( )$sup(g,2)$hinge()$in( + )2$in( )c$in( )d$in( )$sup(e,2)
  136.  
  137. (c26) facsum(exp8,c,'nextlayerfactor,[f]);
  138. |$label(0,15,Times New Roman,$(d26$))f$in( )$sup($paren(h$in( )l$in( + )h$in( )k$in( + )g,$(,$)),2)$hinge()$in( - )2$in( )c$in( )d$in( )$paren(f$in( )$paren(h$in( )l$in( + )h$in( )k$in( + )g,$(,$))$in( - )e,$(,$))$in( )$paren(f$in( )$paren(h$in( )l$in( + )h$in( )k$in( + )g,$(,$))$in( + )e,$(,$))
  139.  
  140. (c27) facsum(exp8,c,[f,'nextlayerfactor]);
  141. |$label(0,15,Times New Roman,$(d27$))c$in( )$paren(2$in( )d$in( )$sup(e,2)$in( - )2$in( )d$in( )$sup(f,2)$in( )$sup($paren(h$in( )l$in( + )h$in( )k$in( + )g,$(,$)),2),$(,$))$hinge()$in( + )f$in( )$sup($paren(h$in( )l$in( + )h$in( )k$in( + )g,$(,$)),2)
  142.  
  143. (c28) /* Another switch facsum_combine[true] controls the form returned by
  144.     facsum when its argument has a denominator. If FACSUM_COMBINE is TRUE
  145.     then the form returned will be a ratio of polynomials.  If FALSE, then
  146.     the denominator factors will be distributed over the terms of the
  147.     numerator. In either case, both the numerator and denominator will
  148.     be processed according to the arguments of FACSUM.
  149. */
  150. exp1/(c*(e+f)+d*e);
  151. |$label(0,15,Times New Roman,$(d28$))$q(d$in( )e$in( )$sup(f,2)$in( + )c$in( )e$in( )$sup(f,2)$in( - )d$in( )e$in( + )c$in( )e$in( + )b$in( )c$in( )d$in( + )a$in( )c$in( )d,c$in( )$paren(f$in( + )e,$(,$))$in( + )d$in( )e)
  152.  
  153. (c29) facsum(exp1/(c*(e+f)+d*e),e,f,[c,d]);
  154. |$label(0,15,Times New Roman,$(d29$))$q($paren(d$in( + )c,$(,$))$in( )e$in( )$sup(f,2)$in( + )$paren(c$in( - )d,$(,$))$in( )e$in( + )$paren(b$in( + )a,$(,$))$in( )c$in( )d,c$in( )f$in( + )$paren(d$in( + )c,$(,$))$in( )e)
  155.  
  156. (c30) facsum(exp1/(c*(e+f)+d*e),e,f,[c,d]), facsum_combine:false;
  157. |$label(0,15,Times New Roman,$(d30$))$q($paren(d$in( + )c,$(,$))$in( )e$in( )$sup(f,2),c$in( )f$in( + )$paren(d$in( + )c,$(,$))$in( )e)$hinge()$in( + )$q($paren(c$in( - )d,$(,$))$in( )e,c$in( )f$in( + )$paren(d$in( + )c,$(,$))$in( )e)$hinge()$in( + )$q($paren(b$in( + )a,$(,$))$in( )c$in( )d,c$in( )f$in( + )$paren(d$in( + )c,$(,$))$in( )e)
  158.  
  159. (c31) /* It is also possible to control the form of the coefficients of
  160.     products of quantities specified in the argument list of FACSUM.
  161.     (Normally, these coefficients are factored, unless they are numbers, and
  162.     the function that is used for this purpose is called NONUMFACTOR.)  But
  163.     it is possible to use other functions in place of NONUMFACTOR by changing
  164.     the AUTOMATIC property of FACSUM.
  165. */
  166. get('facsum,'automatic);
  167. |$label(0,15,Times New Roman,$(d31$))nonumfactor
  168.  
  169. (c32) /*  Let us illustrate this procedure by changing from NONUMFACTOR
  170.     to SQFR. */
  171. put('facsum,'sqfr,'automatic);
  172. |$label(0,15,Times New Roman,$(d32$))sqfr
  173.  
  174. (c33) /*  Now compare the behavior of FACSUM to its former 
  175.          behavior.  Here is what it did with NONUMFACTOR AUTOMATIC: */
  176. answer;
  177. |$label(0,15,Times New Roman,$(d33$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( - )u$in( )$paren(z$in( - )y,$(,$))$in( + )x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren(f$in( - )1,$(,$))$in( )$paren(f$in( + )1,$(,$))
  178.  
  179. (c34) /* And now with SQFR AUTOMATIC: */
  180. facsum(exp2,c,d,[u,v]);
  181. |$label(0,15,Times New Roman,$(d34$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( - )u$in( )$paren(z$in( - )y,$(,$))$in( + )$paren(x$in( + )w,$(,$))$in( )y$in( )z$in( + )b,$(,$))$hinge()$in( + )c$in( )e$in( )$paren($sup(f,2)$in( + )1,$(,$))$hinge()$in( + )d$in( )e$in( )$paren($sup(f,2)$in( - )1,$(,$))
  182.  
  183. (c35) /*  Since this particular choice for AUTOMATIC is so useful, it is
  184.     available as a separate function, SQFRFACSUM. More complicated choices
  185.     are possible, depending on the requirements of the situation.  One
  186.     possibility is illustrated below.
  187.  
  188.     The AUTOMATIC function can be declared FORMAL.  If this is done, then the
  189.     function will not be applied, but will be introduced into the expression
  190.     in the places where it would have been applied.  This capability is useful
  191.     for constructing expressions that one intends to use later in function
  192.     definitions.  We illustrate with SQFR.
  193. */
  194. declare(sqfr,formal)$
  195.  
  196. (c36) facsum(exp2,c,d,[u,v]);
  197. |$label(0,15,Times New Roman,$(d36$))c$in( )d$in( )$paren(sqfr$paren($paren(x$in( + )w,$(,$))$in( )y$in( )z$in( + )b)$in( + )u$in( )$sup(v,2)$in( )sqfr$paren(z$in( + )y)$in( + )u$in( )sqfr$paren(y$in( - )z),$(,$))$hinge()$in( + )c$in( )sqfr$paren(e$in( )$sup(f,2)$in( + )e)$hinge()$in( + )d$in( )sqfr$paren(e$in( )$sup(f,2)$in( - )e)
  198.  
  199. (c37) /*  Now restore the default AUTOMATIC property. */
  200. put('facsum,'nonumfactor,'automatic);
  201. |$label(0,15,Times New Roman,$(d37$))nonumfactor
  202.  
  203. (c38) /* Sometimes one must combine large expressions that have already been
  204.     processed with FACSUM, perhaps in different Macsymas for reasons of
  205.     space. To combine these expressions it is not necessary to FACSUM their
  206.     sum.  An alternative is to use COLLECTTERMS.  We illustrate the use of
  207.     COLLECTTERMS on expressions EXP9 and EXP10. */
  208. exp9:a*u+b;
  209. |$label(0,15,Times New Roman,$(d38$))a$in( )u$hinge()$in( + )b
  210.  
  211. (c39) exp10:c*u+d;
  212. |$label(0,15,Times New Roman,$(d39$))c$in( )u$hinge()$in( + )d
  213.  
  214. (c40) /* COLLECTERMS(exp, var1, var2..) collects terms of exp that contain
  215.     like powers of the vari.  */
  216. collectterms(exp9+exp10,u);
  217. C:\MACSD2B\share\facex1.fas being loaded.
  218. |$label(0,15,Times New Roman,$(d40$))$paren(c$in( + )a,$(,$))$in( )u$hinge()$in( + )d$hinge()$in( + )b
  219.  
  220. (c41) e*u^2+f/u+b+d;
  221. |$label(0,15,Times New Roman,$(d41$))e$in( )$sup(u,2)$hinge()$in( + )$q(f,u)$hinge()$in( + )d$hinge()$in( + )b
  222.  
  223. (c42) exp11:expand(%+exp10*u);
  224. |$label(0,15,Times New Roman,$(d42$))e$in( )$sup(u,2)$hinge()$in( + )c$in( )$sup(u,2)$hinge()$in( + )d$in( )u$hinge()$in( + )$q(f,u)$hinge()$in( + )d$hinge()$in( + )b
  225.  
  226. (c43) collectterms(%,u);
  227. |$label(0,15,Times New Roman,$(d43$))$paren(e$in( + )c,$(,$))$in( )$sup(u,2)$hinge()$in( + )d$in( )u$hinge()$in( + )$q(f,u)$hinge()$in( + )d$hinge()$in( + )b
  228.  
  229. (c44) /* A more complex example: */
  230. u^2*v+exp11+subst(v,u,exp11);
  231. |$label(0,15,Times New Roman,$(d44$))e$in( )$sup(v,2)$hinge()$in( + )c$in( )$sup(v,2)$hinge()$in( + )$sup(u,2)$in( )v$hinge()$in( + )d$in( )v$hinge()$in( + )$q(f,v)$hinge()$in( + )e$in( )$sup(u,2)$hinge()$in( + )c$in( )$sup(u,2)$hinge()$in( + )d$in( )u$hinge()$in( + )$q(f,u)$hinge()$in( + )2$in( )d$hinge()$in( + )2$in( )b
  232.  
  233. (c45) collectterms(%,u,v);
  234. |$label(0,15,Times New Roman,$(d45$))$paren(e$in( + )c,$(,$))$in( )$sup(v,2)$hinge()$in( + )$sup(u,2)$in( )v$hinge()$in( + )d$in( )v$hinge()$in( + )$q(f,v)$hinge()$in( + )$paren(e$in( + )c,$(,$))$in( )$sup(u,2)$hinge()$in( + )d$in( )u$hinge()$in( + )$q(f,u)$hinge()$in( + )2$in( )d$hinge()$in( + )2$in( )b
  235.  
  236. (c46) /* COLLECTTERMS also accepts arguments in the same form as FACSUM. */
  237. exp2;
  238. |$label(0,15,Times New Roman,$(d46$))c$in( )d$in( )$paren(x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )u$in( )$sup(v,2)$in( )z$in( - )u$in( )z$in( + )u$in( )$sup(v,2)$in( )y$in( + )u$in( )y,$(,$))$hinge()$in( + )d$in( )e$in( )$sup(f,2)$hinge()$in( + )c$in( )e$in( )$sup(f,2)$hinge()$in( - )d$in( )e$hinge()$in( + )c$in( )e$hinge()$in( + )b$in( )c$in( )d
  239.  
  240. (c47) collectterms(exp2,c,d,[u,v]);
  241. |$label(0,15,Times New Roman,$(d47$))c$in( )d$in( )$paren(u$in( )$sup(v,2)$in( )$paren(z$in( + )y,$(,$))$in( + )x$in( )y$in( )z$in( + )w$in( )y$in( )z$in( + )u$in( )$paren(y$in( - )z,$(,$))$in( + )b,$(,$))$hinge()$in( + )c$in( )$paren(e$in( )$sup(f,2)$in( + )e,$(,$))$hinge()$in( + )d$in( )$paren(e$in( )$sup(f,2)$in( - )e,$(,$))
  242.  
  243. (c48) exp5_factored;
  244. |$label(0,15,Times New Roman,$(d48$))x$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )d$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )d$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )d$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )d$hinge()$in( + )2$in( )log$paren(a$in( )b)$in( )c$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )c$hinge()$in( + )2$in( )log$paren($q(a,b))$in( )c$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )c
  245.  
  246. (c49) collectterms(exp5_factored,operator(log,"."));
  247. |$label(0,15,Times New Roman,$(d49$))x$hinge()$in( + )log$paren(a$in( )b)$in( )$paren(2$in( )d$in( + )2$in( )c,$(,$))$hinge()$in( + )log$paren($q(a,b))$in( )$paren(2$in( )d$in( + )2$in( )c,$(,$))$hinge()$in( + )$paren(b$in( . )a,$(,$))$in( )$paren(d$in( + )c,$(,$))$hinge()$in( + )$paren(a$in( . )b,$(,$))$in( )$paren(d$in( + )c,$(,$))
  248.  
  249. (c50) /* Clean up */
  250. (remvalue(answer,exp5_factored,exp6_expanded),remove(sqfr,formal))$
  251.  
  252. (c51) /* To complete clean up, execute this form 
  253. remvalue(exp1,exp2,exp3,exp4,exp5,exp6,exp7,exp8,exp9,exp10,exp11)$ */
  254.